/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.com.deuda.bd.dao;

/**
 *
 * @author Sistemas
 */
import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

import pe.com.deuda.bd.hibernate.HibernateMultiple;


public class Util
{

    public static String BASE_DATOS = HibernateMultiple.BD_DEUDA;
    private Session sesion;
    //private Transaction tx;


  public List<Object[]> consultaLibre(String query, String baseDatos) throws Exception {
    List<Object[]> retorno = null;
    try
    {
      BASE_DATOS =
          baseDatos; //base de datos de la cual se va realizar la consulta
      iniciaOperacion();
      SQLQuery q = sesion.createSQLQuery(query);
      retorno = (List<Object[]>) q.list();
      //tx.commit();
    }
    catch (HibernateException he)
    {
      manejaExcepcion(he);
      throw he;
    }
    finally
    {
      try
      {
        HibernateMultiple.closeSession(BASE_DATOS);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }

    return retorno;

  }

  /**
     * sentencia SQL libre Creado solo para fines de grabar el detalle tematico Antiguo
     * **/
  public void sentenciaSQLlibre(String query, String baseDatos) throws Exception {

        try {
            BASE_DATOS =  baseDatos;//base de datos de la cual se va realizar la consulta
            iniciaOperacion();
            sesion.createSQLQuery(query).executeUpdate();
            //tx.commit();
        } catch (HibernateException he) {
             manejaExcepcion(he);
             throw he;
         } finally {
             try {
                 HibernateMultiple.closeSession(BASE_DATOS);
             }catch(Exception  e){
                 e.printStackTrace();
             }
         }

    }


  /**METODOS POR DEFECTO POR CADA DAO CREADO***
   */

  private void iniciaOperacion()
    throws HibernateException
  {
    sesion = HibernateMultiple.currentSession(BASE_DATOS);
    //tx = sesion.beginTransaction();
  }

  private void manejaExcepcion(HibernateException he)
    throws HibernateException
  {
    //tx.rollback();
    throw new HibernateException("Ocurri� un error en la capa de acceso a datos",
                                 he);

  }

  /**
   * PRUEBA DE CONSULTA LIBRE DE BASE DE DATOS
   * **/

  public static void main(String[] arg)
  {
    Util dao = new Util();

    String SQL =
      "SELECT  * from tb_usuario " ;

    System.err.println("SQL:" + SQL);
    List<Object[]> listaResultado = new ArrayList<Object[]>();


    try
    {
      listaResultado =
          dao.consultaLibre(SQL, HibernateMultiple.BD_DEUDA);
    }
    catch (Exception e)
    {
      e.printStackTrace();
      System.err.println("ERROR : " + e);
    }

    for (int row = 0; row < listaResultado.size(); row++)
    {
      Object[] rowResult = listaResultado.get(row);
      System.err.print(" row=" + row + " ");
      for (int column = 0; column < rowResult.length; column++)
      {
        System.err.print(", " + rowResult[column]);
      }
      System.err.println("*****");
    }

  }

}
